package dp;

import java.util.HashMap;
import java.util.Map;

/**
 * https://leetcode.cn/problems/product-of-array-except-self/description/?favorite=2cktkvj
 */
public class _238_除自身以外数组的乘积 {


    /**
     * 这题主要是区分出数组中含有0的个数，如果是1个0，除了元素0的位置，其他元素都是0；如果是超过1个0，则所有的元素都为0
     * @param nums
     * @return
     */
    public int[] productExceptSelf(int[] nums) {
        int res = 1;
        int zeroNum = 0;
        int[] result = new int[nums.length];

        Map<Integer,Integer> map = new HashMap<>();

        for (int i = 0; i <nums.length ; i++) {
            if(nums[i] == 0) {
                zeroNum++;
                if(!map.containsKey(nums[i])) {
                    map.put(nums[i],i);
                }
                continue;
            }
            res *= nums[i];
        }

        if(zeroNum > 1) {
            return result;
        }

        if(zeroNum == 1) {
            result[map.get(0)] = res;
            return result;
        }

        for (int i = 0; i < nums.length; i++) {
            result[i] = res / nums[i];

        }
        return result;
    }
}
